package org.com.platform.core.service.impl;

import org.flowable.engine.*;
import org.flowable.ui.modeler.serviceapi.ModelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @ClassName FlowAbleService
 * @Description TODO
 * @Author SuperMen
 * Date 2019/1/11 10:47
 * @Version 1.0
 **/
@Component
public class FlowAbleService {

    /**
     *流程模型相关
     */
    @Autowired
    protected ModelService modelService;

    /**
     * 操作流程流行时
     *
     * 主要用于管理流程在运行时产生的数据
     * (流程参数, 事件, 流程实例, 以及执行情况)
     * 以及对正在运行的流程进行操作的API
     */
    @Autowired
    protected RuntimeService runtimeService;

    /**
     * 操作任务
     */
    @Autowired
    protected TaskService taskService;

    /**
     * 操作历史流程
     * 服务公开有关正在进行和历史进程实例的信息.
     * 这与运行时信息不同,
     * 因为此运行时信息仅在任何特定时刻包含实际运行时状态,
     * 并且针对运行时进程执行性能进行了优化.
     * 历史信息(谁做了哪些任务, 完成任务需要多长时间,
     * 每个流程实例遵循哪条路径, 等等)经过优化, 易于查询, 并且永久保存
     */
    @Autowired
    protected HistoryService historyservice;

    /**
     * 操作流程定义
     */
    @Autowired
    protected RepositoryService repositoryService;


    /**
     * 操作用户组
     * 它支持组和用户的管理(创建, 更新,删除, 查询)
     * Flowable实际上不会在运行时对用户进行任何检查.
     * 例如, 可以将任务分配给任何用户,
     * 但是引擎不验证该用户是否被系统知晓.
     * 这是意味着Flowable引擎也可以与LDAP, Active Directory等服务结合使用.
     */
    @Autowired
    protected IdentityService identityService;

    /**
     * 操作流程表单
     * FormService 是一个可选的服务.
     * 该服务引入了开始表和任务表的概念.
     * 开始形式是流程实例启动前显示给用户的一种形式,
     * 而任务形式是当一个用户要填写一份表的时候进行显示.
     */
    @Autowired
    protected FormService formService;

    /**
     * ManagementService 为流程引擎上的管理和维护操作提供服务.
     * 此外, 它还暴露了查询功能和作业管理操作.
     * 作业在Flowable中用于各种事情, 如定时器, 异步延续, 延迟挂起/激活等等
     */
    @Autowired
    protected ManagementService managementService;

    /**
     * DynamicBpmnService 可以用来改变流程定义的一部分,而无需重新部署.
     * 例如, 可以在流程定义中更改用户任务的受理人或者更改服务任务的类名称.
     */
    @Autowired
    protected DynamicBpmnService dynamicBpmnService;

}
